﻿function errorObj(id, desc){
		this.id = id;
		this.desc = desc;
	}
		
	var errMsg = new Array();

//Bien xu ly Tab
	
	var activeColor = '#FFFFFF';
	var deactiveColor = '';
	
	var tabDisplay;
	var activeTab;
/**
*  Cac bien toan cuc
*/	
	//var report_window; // Cua so in bao cao
	var strSeparatorArray= new Array("-"," ","/",".");
	var minYear=1000;
	var maxYear=3000;
	var arrContent= new Array();
	var decimalCharacter = '.';
	var usedAddData = true;	
	var curRow ;
	var curRow2 ;
	var key;
	var shift=0;
	var err;
	var OtherColor='#FFFFFF';
	var CurrentColor='#CCE3FF';
	var StartRow = 0;
	var itemIndex = -1;
	var EndRow = 100;
	var cTable;
	var cTable2;	
	var sodong=10;
	var preEl ;
	var orgBColor;
	var orgTColor;
	var out = new Object; 
	out['ok']='false';
	var arrKhoContent = new Array();
	var idname="idname";
	var lablename="lablename";
/** 
* LTDung copy tu TPH
* muc dich: tang toc cho load danh muc
*/	
function StringBuffer() {
    this.__strings__ = new Array;
}

StringBuffer.prototype.append = function (str) {
    this.__strings__.push(str);
}

StringBuffer.prototype.toString = function () {
    return this.__strings__.join("");
}

/** 

/** 
/**
*  Cac thong bao loi hệ thống
*/	
	errMsg["SYS-0001"] = new errorObj("SYS-0001", "Giá trị cho trường này không hợp lệ!");
	errMsg["SYS-0002"] = new errorObj("SYS-0002", "Phải nhập dữ liệu cho trường này!");
	errMsg["SYS-0003"] = new errorObj("SYS-0003", "Phải nhập giá trị dương!");
	errMsg["SYS-0004"] = new errorObj("SYS-0004", "Bạn có muốn thoát thật không?");
	errMsg["SYS-0005"] = new errorObj("SYS-0005", "1 không được lớn hơn 2!");
	errMsg["SYS-0006"] = new errorObj("SYS-0006", "1 không được nhỏ hơn 2!");
	errMsg["SYS-0007"] = new errorObj("SYS-0007", "Mã số thuế không hợp lệ hoặc chưa được phân công!");
	errMsg["SYS-0008"] = new errorObj("SYS-0008", "Trường vừa nhập phải là số!");
	errMsg["SYS-0009"] = new errorObj("SYS-0009", "Kích thước trường này vượt quá giới hạn cho phép!");
	errMsg["SYS-0010"] = new errorObj("SYS-0010", "1 phải bằng 2!");
	errMsg["SYS-0011"] = new errorObj("SYS-0011", "Bạn thực sự muốn đăng nhập lại?");
	errMsg["SYS-0012"] = new errorObj("SYS-0012", "Nợ đến ngày phải thuộc tháng Nợ đến kỳ");
	errMsg["SYS-0013"] = new errorObj("SYS-0013", "1 phải lớn hơn 2");
	
	/** 
* Cac ham hien thi thong bao
* Tham so: Message thong bao toi nguoi su dung!
*/	
function showError(){
	var args = showError.arguments;
	var sURL = "./Error/Message.html";
	var arg = new Object;
	
	arg['type'] 	= 'Error';
	arg['title'] 	= 'Thông báo lỗi';	
	arg['message'] 	= errMsg[args[0]].desc;
	
	if (args.length == 2){		
		arg['message'] = arg['message'].replace('1',args[1]);
	}else if (args.length == 3){
		arg['message'] = arg['message'].replace('1',args[1]);
		arg['message'] = arg['message'].replace('2',args[2]);
	}
	
	//window.showModalDialog(sURL,arg,"dialogWidth:310px;dialogHeight:170px;Help:no;scroll:no;resizable=no;center=yes;status:no");

	alert(arg['message']);
}    
/** 
* Ham: isNull()
* Kiem tra Null
* 	pValue: Gia tri can kiem tra
* Gia tri: 
*	true - neu gia tri do null
*	false - neu gia tri not null
*/
function isNull(pValue){
	return ((pValue==null) || (pValue == ""));
}
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function isNumber(inputVal) {

	inputStr = inputVal.toString()
	for (var i = 0; i < inputStr.length; i++) {
		var oneChar = inputStr.charAt(i)
		if (oneChar < "0" || oneChar > "9") {
			return false
		}
	}
	return true;
//	return !isNaN(parseFloat(inputVal)); 
}
	    /**
* Ham: checkAllRequire()
* Kiem tra cac Required Item tren form, 0 cung coi la Null 
* 	form: Form can kiem tra.
* Gia tri:
* 	true - neu hop le
* 	false - neu khong hop le
* Su dung: onSubmit="return checkAllRequire(this)"
* tat cac cac control co id ket thuc bang "_ck" se duoc check require
*/

/** 
* Ham : validTextNumber()
* Kiem tra du lieu kieu so va khong them cac dau phay phan cach - Number
* 	obj: Item chua gia tri can kiem tra
* 	size: Kich thuoc cua gia tri
* Su dung: onBlur="validTextNumber(this,10)";
*/
function validTextNumber(obj,size){
	if ((obj.value==null) || (obj.value == "")) return true;
	obj.value = trim(obj.value);	
	obj.value = toNumber(obj.value);
	if(!isNumber(obj.value) && !obj.readOnly) {
		showError("SYS-0001");
		err='error';
		obj.focus();
		return false;
	}
	if (obj.value.length > size){
		showError("SYS-0009");
		err='error';
		obj.focus();
		return false;
	}
	return true;
}

/**
* Ham : textNumber() 
* Set mot textbox nhap vao theo dinh dang so, khong cho phep nhap chu. 
* Su dung: onKeyPress = "return textNumber()" 
* Author: ThanhDX.
*/
function textNumber()
{
var keynum;
var keychar;
var numcheck;

if(window.event) // IE
{
keynum = event.keyCode;
}

keychar = String.fromCharCode(keynum);
numcheck = /\d/;
return numcheck.test(keychar);
}

/**
* Ham : textToUpper() 
* Set mot textbox nhap vao theo dinh dang chu hoa. 
* Su dung: onKeyPress = "return textToUpper()" 
* Author: ThanhDX.
*/
function textToUpper()
{
	var keycharUppercase;
	var keychar;

	
	if(window.event){ // IE
		keynum = event.keyCode;
		
		keychar = String.fromCharCode(keynum);
	
		keycharUppercase = keychar.toUpperCase();
		
		event.keyCode = keycharUppercase.charCodeAt(0);
	}	

	return true;
}

/**
* Ham : toFormatNumberDe() 
* Dinh dang 1 gia tri so theo dinh dang #,###.##. 
* 	pnumber : Gia tri so can format. 
* 	decimals : So chu so thap phan.
* Gia tri: So da duoc format 
* Su dung: x = toFormatNumberDe(123,999, 2) 
*/ 
function toFormatNumberDe(pnumber,decimals){
	if (isNaN(pnumber))  return ''; 
	if (pnumber==0 || pnumber=='0') return '0';
	if (isNull(pnumber)) return '';

	var snum = new String(pnumber); 
	var sec = snum.split(decimalCharacter); 
	var arg = toFormatNumberDe.arguments;

	var whole = parseFloat(sec[0]); 
	var result = ''; 
	var temp = ''; 
	if (decimals!=0) { 
		if(sec.length > 1){ 
			var dec = new String(sec[1]); 
			dec = String(parseFloat(sec[1])/Math.pow(10,(dec.length - decimals))); 
			dec = String(whole + Math.round(parseFloat(dec))/Math.pow(10,decimals)); 
			var dot = dec.indexOf(decimalCharacter); 
			if(dot == -1){ 
				dec += decimalCharacter;
				for(i=1;i<=decimals;i++) { dec += '0'; }
			} 
			result = dec; 
		} else{ 
			result = whole;
		} 
	} else {
		result = whole;
	}; 
	snum = String(result); 
	sec = snum.split(decimalCharacter); 
	result=sec[0];	
	if (sec[0].length > 3){
		dec = sec[0]; 
		pos = dec.length%3;
		temp = dec.substr(0, pos);
		dec = dec.substr(pos,dec.length);
		pos = (dec.length - pos)/3;
		for(i=0;i<pos;i++) { 
			if (temp.length>0) temp = temp + decimalCharacter;
			temp += dec.substr(3*i,3); 
		} 
		result= temp;
	}
	
	if (sec.length > 1) { 
	 	result += decimalCharacter;
		temp = sec[1];
		
		pos = temp.length;
		for(i=pos;i<decimals;i++){
			temp += "0";
		}
		result += temp;
	} else if (arg.length > 2) {
		result += decimalCharacter;
		for(i=0;i<arg[2];i++){
			result += '0';
		}
	} 
	return result; 
} 
/** 
* Ham: toFormatNumber()
* Dat format cho cac truong kieu so theo dinh dang #.### (0 chu so thap phan)
* 	pnumber: Gia tri so can format. 
* Gia tri:  Gia tri so da duoc format. 
* Su dung: x = toFormatNumber('123456');
*/
function toFormatNumber(pnumber){ 
	return toFormatNumberDe(pnumber,0)
} 

/** 
* Ham: toNumber()
* Bo format cho cac truong kieu so, chuyen tu dang #,###,### ve dang  ######
* 	pNumber: Gia tri can convert
* Gia tri: Gia tri cua so theo dang #####
* Su dung: x = toNumber('123,456');
*/
function toNumber(pNumber){ 
	s =	new String(pNumber);
	s = s.replace(/,/g,'');
	return s;
}

// Khai bao phuong thuc trim()
String.prototype.trim = function () {
var reExtraSpace = /^\s+(.*?)\s+$/;
return this.replace(reExtraSpace, "$1");
};
/**
* Ham: checkAllRequire()
* Kiem tra cac Required Item tren form, 0 cung coi la Null 
* 	form: Form can kiem tra.
* Gia tri:
* 	true - neu hop le
* 	false - neu khong hop le
* Su dung: onSubmit="return checkAllRequire(this)"
* tat cac cac control co id ket thuc bang "_ck" se duoc check require
*/
function checkAllRequire(form){
	vReturn = true;
 	obj = eval(form);
 	for(i=0;i<obj.length;i++) {
  		var field_name = obj.elements[i].id;
  		if (field_name.indexOf("_ck") != -1)  {
	    	if (isNull(obj.elements[i].value)||obj.elements[i].value == "0") {
	      		vReturn = false;
	      		showError("SYS-0002");
	      		obj.elements[i].focus();
	      		return vReturn;
	    	}
		}
 	} 
	return vReturn;
}
function Back() 
{        
	if (arguments.length != 0)
	 {
	//	var i=arguments[0]
	//	alert(i);
		window.history.go(arguments[0]);		
	} 
	
}
function OpenPopupModal(fileName)
{
    var w=750;
    var h=560;
    var left = (screen.width/2)-(w/2);
    var top = (screen.height/2)-(h/2);
    
   window.showModalDialog(fileName, null,'center:yes;resizable:no;status:no;dialogWidth:600px;dialogHeight:540px'); //OKI
   
}
function refreshParent() {
window.opener.location.href = window.opener.location.href;
if (window.opener.progressWindow)
{
window.opener.progressWindow.close()
}
window.close();
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   } 
   return this;
}
function validDate(dateField, dateFormat,require){
	var dt=dateField;
	if ((dt.value==null) || (dt.value == "")) return true;
	var returndate;
	if ((dateFormat.toUpperCase() == 'DD/MM/YYYY') || (dateFormat.toUpperCase() == 'D')){
		returndate = isDate(dt.value);
	}
	else if ((dateFormat.toUpperCase() == 'MM/YYYY') || (dateFormat.toUpperCase() == 'M'))	{
		returndate = isMonth(dt.value);
	}
	else if ((dateFormat.toUpperCase() == 'Q/YYYY') || (dateFormat.toUpperCase() == 'Q')){
		returndate = isQuarter(dt.value);
	}else if ((dateFormat.toUpperCase() == 'YYYY') || (dateFormat.toUpperCase() == 'Y')){
		returndate = isYear(dt.value);
	}else if ((dateFormat.toUpperCase() == 'DD/MM') ){
		returndate = isDDMM(dt.value);

	}else	{
		returndate = false;
	}

	if (returndate ==false){
		err='error';
		if((require == null)||(require==true)||(require==false))
		{
			showError("SYS-0001");
			dt.value = "";
			dt.focus();
		}
		return false;
	}
	dt.value = returndate;
	return returndate;
 }
 
 function isDate(dtStr){
	var dtCh= "*";
	if (dtStr == "") return true;
	var daysInMonth = DaysArray(12);

	for (var intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (dtStr.indexOf(strSeparatorArray[intElementNr]) != -1) 
			dtCh = strSeparatorArray[intElementNr];
	}
	if (dtCh != "*") //neu co ky hieu phan cach
	{
		var pos1=dtStr.indexOf(dtCh);
		var pos2=dtStr.indexOf(dtCh,pos1+1);
		if (pos1==-1 || pos2==-1){
			return false;
		}	
		var strDay=dtStr.substring(0,pos1);
		var strMonth=dtStr.substring(pos1+1,pos2);
		var strYear=dtStr.substring(pos2+1);
	}else	//khong co ky hieu phan cach
	{
		if (dtStr.length>5) {
			strDay = dtStr.substr(0, 2);
			strMonth = dtStr.substr(2, 2);
			strYear = dtStr.substr(4);
   		}
		else
			return false;
	}
	
	if (!isInteger(strYear) || !isInteger(strMonth) || !isInteger(strDay)) 
		return false;

	strYr=strYear;

	if (strDay.charAt(0)=="0" && strDay.length>1) 
		strDay=strDay.substring(1);
	
	if (strMonth.charAt(0)=="0" && strMonth.length>1) 
		strMonth=strMonth.substring(1);
	
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);

	if (strMonth.length<1 || month<1 || month>12){
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false;
	}
	
	if(year < 50 ) year += 2000;
	if(year >50 && year <1000) year += 1900;
	if (strYear.length < 1 || year==0 || year<minYear || year>maxYear){
		return false;
	}
	if (day<10) day = "0" + day;
	if (month<10) month = "0" + month;
	return "" + day + "/" + month + "/" + year;
}
function isMonth(dtStr){
	var dtCh= "*";
	if (dtStr == "") return "";
	var daysInMonth = DaysArray(12);
	
	for (var intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (dtStr.indexOf(strSeparatorArray[intElementNr]) != -1) 
			dtCh = strSeparatorArray[intElementNr];
	}
	
	if (dtCh != "*") //neu co ky hieu phan cach
	{
		var pos1=dtStr.indexOf(dtCh);

		var strMonth=dtStr.substring(0,pos1);
		var strYear=dtStr.substring(pos1+1);
	}
	else	//khong co ky hieu phan cach
	{
		if (dtStr.length>3) {
			strMonth = dtStr.substr(0, 2);
			strYear = dtStr.substr(2);
   		}
		else
			return false;
	}

	if (!isInteger(strYear) || !isInteger(strMonth)) 
		return false;
	strYr=strYear;
	
	if (strMonth.charAt(0)=="0" && strMonth.length>1) 
		strMonth=strMonth.substring(1);
	
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	
	month=parseInt(strMonth);
	year=parseInt(strYr);

	if (strMonth.length<1 || month<1 || month>12){
		return false;
	}
	
	if(year < 50 ) year += 2000;
	if(year >50 && year <1000) year += 1900;
	if (strYear.length < 1 || year==0 || year<minYear || year>maxYear){
		return false;
	}
	if (month < 10) month = "0" + month ;
	return "" + month + "/" + year;
}

function isQuarter(dtStrIn){
	var dtStr = dtStrIn;
	if (dtStrIn.substring(0,1).toUpperCase() == "Q") {
		dtStr = "0"+dtStrIn.substring(1);
	}
	var dtCh= "*";
	if (dtStr == "") return "";
	var daysInMonth = DaysArray(12);
	
	for (var intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (dtStr.indexOf(strSeparatorArray[intElementNr]) != -1) 
			dtCh = strSeparatorArray[intElementNr];
	}
	
	if (dtCh != "*") //neu co ky hieu phan cach
	{
		var pos1=dtStr.indexOf(dtCh);

		var strQuarter=dtStr.substring(0,pos1);
		var strYear=dtStr.substring(pos1+1);
	}
	else	//khong co ky hieu phan cach
	{
		if (dtStr.length>3) {
			strQuarter = dtStr.substr(0, 2);
			strYear = dtStr.substr(2);
   		}
		else
			return false;
	}

	if (!isInteger(strYear) || !isInteger(strQuarter)) 
		return false;
	strYr=strYear;
	
	if (strQuarter.charAt(0)=="0" && strQuarter.length>1) 
		strQuarter=strQuarter.substring(1);
	
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	
	quarter=parseInt(strQuarter);
	year=parseInt(strYr);

	if (strQuarter.length<1 || quarter<1 || quarter>4){
		return false;
	}
	
	if(year < 50 ) year += 2000;
	if(year >50 && year <1000) year += 1900;
	if (strYear.length < 1 || year==0 || year<minYear || year>maxYear){
		return false;
	}
	return "Q" + quarter + "/" + year;
}

function isYear(dtStr){
	if (dtStr == "") return "";
	var daysInMonth = DaysArray(12);
	strYear=dtStr;
	strYr=strYear;
	if (!isInteger(strYear)) return false;
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	
	year=parseInt(strYr);
	if(year < 50 ) year += 2000;
	if(year >50 && year <1000) year += 1900;
	if (strYear.length < 1 || year==0 || year<minYear || year>maxYear){
		return false;
	}
	return "" + year;
}
function isDDMM(dtStr){
	var dtCh= "*";
	if (dtStr == "") return true;
	var daysInMonth = DaysArray(12);

	for (var intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (dtStr.indexOf(strSeparatorArray[intElementNr]) != -1) 
			dtCh = strSeparatorArray[intElementNr];
	}
	if (dtCh != "*") //neu co ky hieu phan cach
	{
		returndate = isDate(dtStr+ dtCh +"2000");
	}else
	{
		returndate = isDate(dtStr +"2000");
	}
	if(returndate !=false)
	{
		returndate=returndate.substr(0, 5);
	}
	return returndate;
}
function daysInFebruary (year){
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}


// Hien thi ngay hien tai
function showDate() { 
	var time = new Date(); 
	var dd=time.getDate(); 
	var mm=time.getMonth()+1; 
	var yy=time.getYear() ;
	var temp = '';
	if (dd < 10) dd = '0' + dd;
	if (mm < 10) mm = '0' + mm;
	temp = dd + "/" + mm + "/" + yy ;
	document.write(temp); 
} 